package com.sinan.core.connector;

import com.sinan.core.connector.components.PropertyContext;
import com.sinan.core.connector.components.PropertyDescriptor;

import java.io.Closeable;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Properties;

/**
 * 连机器顶层接口，用于构建数据源连接
 * @author pengpei
 */
public interface Connector extends Closeable, PropertyContext {

    void open();

    /**
     * 超时连接
     *
     * @param timeout, 毫秒数，连接超时时间
     */
    void open(int timeout);

    /**
     * 校验连接参数
     */
    default void validateProperties() {};

    /**
     *
     * 获取连接产品的版本
     * @return
     */
    String getProductVersion();

    /**
     * 设置连接产品的版本
     * @param productVersion
     */
    void setProductVersion(String productVersion);

    boolean isClosed();

    /**
     * 验证配置
     * @return
     */
    Collection<ValidationResult> customValidate();

    /**
     * 获取connector支持的属性定义
     * @return
     */
    default List<PropertyDescriptor> getSupportedPropertyDescriptors() {
        return Collections.emptyList();
    };
}
